/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tcr.main;

import android.view.MotionEvent;
import com.tcr.entities.*;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.tcr.main.R;
import java.util.Collection;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.protocol.HTTP;
import org.codehaus.jackson.map.ObjectMapper;
import org.json.JSONObject;

/**
 *
 * @author V.D
 * 
 * Activity de lancement de l'application
 * L'utilisateur a le choix de se logger ou de se creer un compte
 * 
 */
public class TheCityRater extends Activity {

    private final String URLTCR = "http://10.0.2.2:8080/TheCityRater-war/services/utilisateurs/";
    private Button connexionB;
    private Button creationB;
    private String loginS;
    private String mdpS;
    private String afficherErreur;
    private TextView erreur;
    private Intent intent;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.launch);

        // Recuperation des Boutons/TextView afin de se connecter
        //  ou d'aller a la creation de client
        connexionB = (Button) findViewById(R.connexion.connexion);
        creationB = (Button) findViewById(R.connexion.creationC);
        erreur = (TextView) findViewById(R.connexion.erreurText);

        // On verifie les informations login/mdp 
        //afin de voir si la personne peut utiliser l'appli ou non
        connexionB.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View arg0, MotionEvent arg1) {
                switch (arg1.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        verifUser();

                }

                return true;
            }
        });
        
        // On part sur l'activity CreationClient
        creationB.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View arg0, MotionEvent arg1) {
                switch (arg1.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        startActivity(new Intent(TheCityRater.this, CreationClient.class));

                }

                return true;
            }
        });


    }

    /**
     * Methode permettant de verifier les informations rentrees
     * afin de savoir si l(utilisateur existe ou non
     */
    private void verifUser() {
        afficherErreur = "";
        loginS = ((EditText) findViewById(R.connexion.login)).getText().toString();
        mdpS = ((EditText) findViewById(R.connexion.mdp)).getText().toString();
        if (loginS == null || loginS.equals("") || mdpS == null || mdpS.equals("")) {
            afficherErreur = "Remplissez tous les champs";
        } else if (loginS.length() < 5) {
            afficherErreur = "Login trop court";

        } else if (mdpS.length() < 5) {
            afficherErreur = "Mot de passe trop court";
        } else {
            getUser(loginS, mdpS);
        }
        
        // Si erreur on l'afficha,e sinon on part sur l'activity Accueil
        if (!afficherErreur.equals("")) {
            erreur.setText(afficherErreur);
            erreur.setVisibility(TextView.VISIBLE);
        } else {
            erreur.setVisibility(TextView.INVISIBLE);
            startActivity(intent);
        }
    }

    /**
     * verification en BD grace a un WS que le client existe bien
     * @param login
     * @param mdp 
     */
    private void getUser(String login, String mdp) {
        try {

            BasicHttpParams httpParams = new BasicHttpParams();
            ConnManagerParams.setTimeout(httpParams, 20000);
            HttpClient client = new DefaultHttpClient(httpParams);
            HttpPost httpPost = new HttpPost(URLTCR + "getUser");

            JSONObject jsonObject = new JSONObject();
            jsonObject.put("LOGIN", login);
            jsonObject.put("MDP", mdp);
            jsonObject.put("TYPE", "Client");

            StringEntity stringEntity = new StringEntity(jsonObject.toString());
            stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setEntity(stringEntity);
            HttpResponse response;

            response = client.execute(httpPost);

            HttpEntity entity = response.getEntity();
            
            // Si le client n'existe pas, on renvoit une erreur
            // Sinon on recupere ses informations et on part sur l'activity Accueil
            if (entity == null) {
                afficherErreur = "Login / Mot de passe erreur";

            } else {
                ObjectMapper objectM = new ObjectMapper();
                Client cl = objectM.readValue(entity.getContent(), Client.class);
                intent = new Intent(TheCityRater.this, Accueil.class);
                intent.putExtra("User", cl);

            }
        } catch (Exception e) {

            afficherErreur = e.getLocalizedMessage();

        }
    }
}
